home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / system-config-printer / probe_printer.py < prev    next >
Text File  |  2008-10-20  |  4KB  |  127 lines

  1. ## system-config-printer
  2.  
  3. ## Copyright (C) 2006, 2007, 2008 Red Hat, Inc.
  4. ## Copyright (C) 2006 Florian Festi <ffesti@redhat.com>
  5. ## Copyright (C) 2007, 2008 Tim Waugh <twaugh@redhat.com>
  6.  
  7. ## This program is free software; you can redistribute it and/or modify
  8. ## it under the terms of the GNU General Public License as published by
  9. ## the Free Software Foundation; either version 2 of the License, or
  10. ## (at your option) any later version.
  11.  
  12. ## This program is distributed in the hope that it will be useful,
  13. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. ## GNU General Public License for more details.
  16.  
  17. ## You should have received a copy of the GNU General Public License
  18. ## along with this program; if not, write to the Free Software
  19. ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  
  21. import socket, time
  22.  
  23. class LpdServer:
  24.     def __init__(self, hostname):
  25.         self.hostname = hostname
  26.         self.max_lpt_com = 8
  27.  
  28.     def _open_socket(self):
  29.         port = 515
  30.         try:
  31.             host, port = self.hostname.split(":", 1)
  32.         except ValueError:
  33.             host = self.hostname
  34.         
  35.         s = None
  36.         try:
  37.             ai = socket.getaddrinfo(host, port, socket.AF_UNSPEC,
  38.                                     socket.SOCK_STREAM)
  39.         except socket.gaierror:
  40.             ai = []
  41.  
  42.         for res in ai:
  43.             af, socktype, proto, canonname, sa = res
  44.             try:
  45.                 s = socket.socket(af, socktype, proto)
  46.             except socket.error, msg:
  47.                 s = None
  48.                 continue
  49.             try:
  50.                 s.connect(sa)
  51.             except socket.error, msg:
  52.                 s.close()
  53.                 s = None
  54.                 continue
  55.             break
  56.         return s
  57.  
  58.     def _probe_queue(self,name, result):
  59.         s = self._open_socket()
  60.         if not s: return False
  61.         print name
  62.         
  63.         try:
  64.             s.send('\0x02%s\n' % name) # cmd send job to queue
  65.             data = s.recv(1024) # receive status
  66.             print repr(data)
  67.         except socket.error, msg:
  68.             print msg
  69.             try:
  70.                 s.close ()
  71.             except:
  72.                 pass
  73.  
  74.             return False
  75.  
  76.         if len(data)>0 and data[0]==0:
  77.             try:
  78.                 s.send('\0x01\n') # abort job again
  79.                 s.close ()
  80.             except:
  81.                 pass
  82.  
  83.             result.append(name)
  84.             return True
  85.  
  86.         try:
  87.             s.close()
  88.         except:
  89.             pass
  90.  
  91.         return False
  92.  
  93.     def probe(self):
  94.         #s = self._open_socket()        
  95.         #if s is None:
  96.         #    return []
  97.         result = []
  98.         for name in ["PASSTHRU", "ps", "lp", "PORT1", ""]:
  99.             self._probe_queue(name, result)
  100.             time.sleep(0.1) # avoid DOS and following counter messures 
  101.         for nr in range(self.max_lpt_com):
  102.             self._probe_queue("LPT%d" % nr, result)
  103.             time.sleep(0.1)
  104.             self._probe_queue("LPT%d_PASSTHRU" % nr, result)
  105.             time.sleep(0.1)
  106.             self._probe_queue("COM%d" % nr, result)
  107.             time.sleep(0.1)
  108.             self._probe_queue("COM%d_PASSTHRU" % nr, result)
  109.             time.sleep(0.1)
  110.  
  111.         nr = 1
  112.         while nr<50:
  113.             found =  self._probe_queue("pr%d" % nr, result)
  114.             time.sleep(0.1)
  115.             if not found: break
  116.             nr += 1
  117.  
  118.         return result
  119.  
  120. class SocketServer:
  121.     def __init__(self, hostname):
  122.         self.hostname = hostname
  123.     
  124. class IppServer:
  125.     def __init__(self, hostname):
  126.         self.hostname = hostname
  127.